#include<stdio.h>
#include<assert.h>
#include<unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include<sys/types.h>
int main()
{
    //1.考察进程等待的意义， 同时理解wait/waitpid函数的使用
    
    //2.要求：

    //2.1代码创建子进程， 父进程调用wait/waitpid函数进行等待， 
    //子进程打印“i am child process”之后，等待5s钟结束子进程；

    //2.2 父进程在等待到子进程之后， 分析子进程的退出信号， 
    //coredump标志位以及退出码， 并打印到标准输出
    int status;
    pid_t id=fork();
    assert(id>=0);
    if(id==0)
    {
        //child

        printf("i am child process");
        sleep(5);
        exit(1);//程序正常退出
    }
    else
    {
        //father

        pid_t child_pid=waitpid(id,&status,0);//等待子进程结束
        if(WIFEXITED(status))//判断子进程是否正常退出
        {
            printf("child exit status=%d\n",WEXITSTATUS(status));
        }
        else if(WIFSIGNALED(status))//判断子进程是否被信号杀死
        {
            printf("child killed by signal %d\n",WTERMSIG(status));
            if(WCOREDUMP(status))//是否产生coredump文件
            {
                printf("child core dumped\n");
            }
        }

    }
    return 0;
}